package testPackage;

import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

import java.util.concurrent.TimeUnit;

/**
 * step by step 19 Selenium WebDriver中的JavaScriptExecutor
 * 1、需要执行JavaScript代码的场景：
 * 1）处理Selenium WebDriver定位器无法定位的隐藏web元素
 * 2）处理需要显式执行的javascript代码的测试方案
 * 3）用于执行诸如“滚动网页”之类的操作
 * JavaScriptExecutor可以使Selenium WebDriver执行javascript代码
 * 2、两种javascript代码注入的方法：
 * 1）executeScript() -在当前窗口或框架中运行指定的javascript代码
 * 2）executeAsyncScript（） -在当前窗口或框架中运行指定的异步javascript代码
 */
public class Selenium16 {
    public static void main(String[] args) {

        testScroll();
    }
    //自动滚动的方法
    public static void testScroll() {
        String str = "D:\\\\Enviroments\\\\geckodriver-v0.26.0-win64\\\\chromedriver.exe";
        System.setProperty("webdriver.chrome.driver", str);
        WebDriver driver = new ChromeDriver();
        //打开网页
        driver.get("https://www.flipkart.com");
        driver.manage().window().maximize();
        //搜索框中输入搜索信息
        WebElement searchBox = driver.findElement(By.id("fk-top-search-box"));
        searchBox.sendKeys("Buddha");
        //点击搜索按钮
        WebElement searchButton = driver.findElement(By.className("search-bar-submit"));
        searchButton.click();
        //等待3s
        driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        //向下滚动页面
        JavascriptExecutor js = (JavascriptExecutor) driver;
        js.executeScript("scrollBy(0,2500)");
        driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
    }
}
